//package com.amuse.amuse.service.impl;
//import com.amuse.amuse.entity.permissions;
//
//import com.amuse.amuse.entity.roles;
//import com.amuse.amuse.entity.students;
//import com.amuse.amuse.mapper.repository.PermissionsRepository;
//import com.amuse.amuse.mapper.repository.RolesRepository;
//import com.amuse.amuse.mapper.repository.StudentsRepository;
//import org.springframework.security.core.GrantedAuthority;
//import org.springframework.security.core.authority.SimpleGrantedAuthority;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.core.userdetails.UsernameNotFoundException;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//import java.util.Optional;
//import java.util.stream.Collectors;
//
//@Service
//public class UserDetailsServiceImpl implements UserDetailsService {
//    /**
//     * StudentDetailServiceImpl 类的构造方法。
//     *
//     * @param studentRepository 学生信息的仓库接口，用于存储和检索学生数据。
//     * @param roleRepository 角色信息的仓库接口，用于存储和检索角色数据。
//     * 此构造方法初始化了服务类所需的两个仓库实例，
//     * 以便在处理学生详细信息时能够同时访问学生和角色数据。
//     */
//    private final StudentsRepository studentRepository;
//    private final RolesRepository roleRepository;
//    private final PermissionsRepository permissionsRepository;
//
//    public UserDetailsServiceImpl(StudentsRepository studentRepository, RolesRepository roleRepository, PermissionsRepository permissionsRepository) {
//        this.studentRepository = studentRepository;
//        this.roleRepository = roleRepository;
//        this.permissionsRepository = permissionsRepository;
//    }
//    @Override
//    public UserDetails  loadUserByUsername(String name) throws UsernameNotFoundException {
//        students student = studentRepository.findByName(name)
//                .orElseThrow(() -> new UsernameNotFoundException("用户名不存在"));
//        /*
//        * orElseThrow方法: 这个方法用于处理`Optional`中的值。如果`Optional`非空，它将返回`Optional`内部封装的对象（即找到的学生）
//        * 如果`Optional`为空（意味着没有找到匹配的学生）`orElseThrow`将抛出一个`UsernameNotFoundException`异常，
//        * 这个异常是`RuntimeException`的一个子类，表示“用户名不存在”。*/
//        Optional<roles> byRoleName = roleRepository.findByRoleName(student.getRoleId());
//        List<permissions> byPermissionName = permissionsRepository.findByPermissionName(student.getRoleId());
//
//        System.out.println(byPermissionName);
//        System.out.println(byRoleName);
//
//        /**
//         * 根据权限名称集合，转换为GrantedAuthority类型的列表。
//         * 这一过程是将每个权限名称映射为一个SimpleGrantedAuthority对象，
//         * 然后收集这些对象到一个List中，为后续的权限认证提供数据支持。
//         *
//         * @param byPermissionName 权限名称的集合，每个元素包含具体的权限名。
//         * @return 返回一个GrantedAuthority类型的列表，每个元素代表一个权限。
//         */
//        List<GrantedAuthority> authorities = byPermissionName.stream()
//                .map(permissions -> new SimpleGrantedAuthority(permissions.getPermissionName()))
//                .collect(Collectors.toList());
//        return new org.springframework.security.core.userdetails.User(student.getName(), student.getPassword() ,authorities);
//    }
//
//}
